今日內容:三元運算子、nhanced switch、邏輯運算子、迴圈、methods、overloaded methods、變數範圍(scope)
// (判斷式?成立的敘述:不成立的敘述)
跟之前學過的一模一樣
邏輯類似C的switch,用於取代多層的if else,只是case後面不是加 ":" ,而是 "->"
如果有相同的case,也不是像以前一樣換行疊層,而是直接用逗號分隔(比較直觀)
String day = "Monday";
switch(day){
case "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday" -> System.out.println("It is a weekday.");
case "Saturday", "Sunday" -> System.out.println("It is the weekend.");
default -> System.out.println(day + " is not a day.");
}
一樣分為for與while兩種大項
基本的counter based for寫法一樣
for (int i=0; i<10; ++i){
System.out.println(i);
}
/*
for(1-變數初始化; 2-判斷條件; 4-執行完的迭代){
3-執行內容;
}
*/
而C++中的range based for在Java中好像叫enhanced for?
不過寫起來也是一樣,只是不像C++有 "auto" 這個變數型態可以用
// 假設有一個存放數值的int array名為nums
for(int num : nums){
System.out.println(num);
}
可以想成if的無限判斷版本,執行直到不符合判斷條件,要注意會不會有無法跳出迴圈的狀況
int num = 15220;
while(num > 500){
num /= 2;
}
而另一種do while則是必定先跑一次內容,隨後再檢查條件式
do{
num /= 2;
}while(num > 500);
一個簡單好理解的說法就是 Method(Java) = function(C++)
這兩個東西的目的都是創建一個可被重複呼叫的功能區塊
不過一樣要記得傳入的內容是 pass by value 還是 pass by reference 這些問題
另外,由於Java的main是static,只能使用static的method,所以在Main Class中宣告時要宣告成static的method才能使用
static int add(int a, int b){
return a+b;
}
在程式開始執行時,習慣需要從static的main開始執行內容,而非該Class的constructor
是當初在寫Java的人的慣例(convention),以避免歧異性(ambiguity)
如同我對method的理解方式,這個就是overloaded function
對於同名的method,可以創建多個有不同參數的method,使其可以應用於更多場景
static int add(int a, int b){
return a+b;
}
static int add(int a, int b, int c){
return a+b+c;
}
static int add(int a, int b, int c, int d){
return a+b+c+d;
}
// ...
這樣在呼叫method時,系統會自動根據傳入的參數數量,判斷要準確呼叫哪一個method
基本上也是跟C, C++一樣,如果在局部(local)與全域(global)有相同名稱的變數,則會遵循"由內至外"的呼叫方式
public class Main{
public int x = 5;
public static void main(String[] args){
int x = 3;
System.out.println(x);
}
}
// 輸出結果會是 3
今天是學習Java基本語法的第三天,感覺今天遇到的仍然是熟悉的內容,只是有些用法(例如switch由 ":" 改成 "->")會需要特別記憶並調整,其他的話都還是很熟悉的內容。
今天也是快樂學習的一天,明天繼續!